package comprehensive;

public class Exercises1 {
    // 1863、找出所有子集的异或总和再求和
    int ret; // 返回结果
    int path; // 存储的是每一个子集的异或和
    public int subsetXORSum(int[] nums) {
        // 这个题和 78、子集 差不多
        dfs(nums,0);
        return ret;
    }

    public void dfs(int[] nums,int pos) {
        ret += path;

        for(int i = pos;i < nums.length;i++) {
            path ^= nums[i];
            dfs(nums,i + 1);
            // 回溯-> 恢复现场，异或一个数据再异或一次这个数据，就会抵消，恢复原先的数值
            path ^= nums[i];
        }
    }
}
